New interactive test program to verify client message functionality.
authorTor Lillqvist <tml@novell.com>
Sat, 1 Nov 2008 11:57:42 +0000 (11:57 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Sat, 1 Nov 2008 11:57:42 +0000 (11:57 +0000)
2008-11-01  Tor Lillqvist  <tml@novell.com>

* tests/testclientmessage.c: New interactive test program to
verify client message functionality.

* tests/Makefile.am: Add it.

svn path=/trunk/; revision=21749

ChangeLog
tests/Makefile.am
tests/testclientmessage.c [new file with mode: 0644]

index 03a119152e4556e591c1bb88862b8a5b8bd586b0..d4a1650a710fd17df53cb4ba6092df3579955a59 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        although not exactly, as the parameter list and return value
        semantics of gdk_event_translate() is different.
 
+       * tests/testclientmessage.c: New interactive test program to
+       verify client message functionality.
+
+       * tests/Makefile.am: Add it.
+
 2008-11-01  Matthias Clasen  <mclasen@redhat.com>
 
        Bug 409435 – GtkStatusIcon enhancements: DnD, scroll events, 
index bd8848347ee87b24362ccb5f30b0a2ed3f38a0e6..dfef128eadbb2bf19a0a67a1a5f2b0719bb52e60 100644 (file)
@@ -35,6 +35,7 @@ noinst_PROGRAMS =  $(TEST_PROGS)      \
        testcombo                       \
        testcombochange                 \
        testcellrenderertext            \
+       testclientmessage               \
        testdnd                         \
        testellipsise                   \
        testentrycompletion             \
@@ -113,6 +114,7 @@ testcalendar_DEPENDENCIES = $(TEST_DEPS)
 testcombo_DEPENDENCIES = $(TEST_DEPS)
 testcombochange_DEPENDENCIES = $(TEST_DEPS)
 testcellrenderertext_DEPENDENCIES = $(TEST_DEPS)
+testclientmessage_DEPENDENCIES = $(TEST_DEPS)
 testdnd_DEPENDENCIES = $(TEST_DEPS)
 testellipsise_DEPENDENCIES = $(TEST_DEPS)
 testentrycompletion_DEPENDENCIES = $(TEST_DEPS)
@@ -166,6 +168,7 @@ testcalendar_LDADD = $(LDADDS)
 testcombo_LDADD = $(LDADDS)
 testcombochange_LDADD = $(LDADDS)
 testcellrenderertext_LDADD = $(LDADDS)
+testclientmessage_LDADD = $(LDADDS)
 testdnd_LDADD = $(LDADDS)
 testellipsise_LDADD = $(LDADDS)
 testentrycompletion_LDADD = $(LDADDS)
diff --git a/tests/testclientmessage.c b/tests/testclientmessage.c
new file mode 100644 (file)
index 0000000..38516ea
--- /dev/null
@@ -0,0 +1,122 @@
+/* testclientmessage.c\r
+ * Copyright (C) 2008  Novell, Inc.\r
+ *\r
+ * This library is free software; you can redistribute it and/or\r
+ * modify it under the terms of the GNU Library General Public\r
+ * License as published by the Free Software Foundation; either\r
+ * version 2 of the License, or (at your option) any later version.\r
+ *\r
+ * This library is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+ * Library General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU Library General Public\r
+ * License along with this library; if not, write to the\r
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,\r
+ * Boston, MA 02111-1307, USA.\r
+ */\r
+\r
+#include <gtk/gtk.h>\r
+\r
+static GdkAtom my_type;\r
+static GdkAtom random_type;\r
+\r
+static void\r
+send_known (void)\r
+{\r
+  GdkEvent *event = gdk_event_new (GDK_CLIENT_EVENT);\r
+  static int counter = 42;\r
+  int i;\r
+  \r
+  event->client.window = NULL;\r
+  event->client.message_type = my_type;\r
+  event->client.data_format = 32;\r
+  event->client.data.l[0] = counter++;\r
+  for (i = 1; i < 5; i++)\r
+    event->client.data.l[i] = 0;\r
+\r
+  gdk_screen_broadcast_client_message (gdk_display_get_default_screen (gdk_display_get_default ()), event);\r
+  \r
+  gdk_event_free (event);\r
+}\r
+\r
+void\r
+send_random (void)\r
+{\r
+  GdkEvent *event = gdk_event_new (GDK_CLIENT_EVENT);\r
+  static int counter = 1;\r
+  int i;\r
+  \r
+  event->client.window = NULL;\r
+  event->client.message_type = random_type;\r
+  event->client.data_format = 32;\r
+  event->client.data.l[0] = counter++;\r
+  for (i = 1; i < 5; i++)\r
+    event->client.data.l[i] = 0;\r
+\r
+  gdk_screen_broadcast_client_message (gdk_display_get_default_screen (gdk_display_get_default ()), event);\r
+  \r
+  gdk_event_free (event);\r
+}\r
+\r
+static GdkFilterReturn\r
+filter_func (GdkXEvent *xevent,\r
+            GdkEvent  *event,\r
+            gpointer   data)\r
+{\r
+  g_print ("Got matching client message!\n");\r
+  return GDK_FILTER_REMOVE;\r
+}\r
+\r
+int\r
+main (int argc, char **argv)\r
+{\r
+  GtkWidget *window;\r
+  GtkWidget *vbox;\r
+  GtkWidget *button;\r
+\r
+  gtk_init (&argc, &argv);\r
+\r
+  my_type = gdk_atom_intern ("GtkTestClientMessage", FALSE);\r
+  random_type = gdk_atom_intern (g_strdup_printf ("GtkTestClientMessage-%d",\r
+                                                 g_rand_int_range (g_rand_new (), 1, 99)),\r
+                                FALSE);\r
+\r
+  g_print ("using client message type %s\n", gdk_atom_name (my_type));\r
+\r
+ window = g_object_connect (g_object_new (gtk_window_get_type (),\r
+                                          "type", GTK_WINDOW_TOPLEVEL,\r
+                                          "title", "testclientmessage",\r
+                                          "border_width", 10,\r
+                                          NULL),\r
+                            "signal::destroy", gtk_main_quit, NULL,\r
+                            NULL);\r
+  vbox = g_object_new (gtk_vbox_get_type (),\r
+                      "GtkWidget::parent", window,\r
+                      "GtkWidget::visible", TRUE,\r
+                      NULL);\r
+  button = g_object_connect (g_object_new (gtk_button_get_type (),\r
+                                          "GtkButton::label", "send known client message",\r
+                                          "GtkWidget::parent", vbox,\r
+                                          "GtkWidget::visible", TRUE,\r
+                                          NULL),\r
+                            "signal::clicked", send_known, NULL,\r
+                            NULL);\r
+  button = g_object_connect (g_object_new (gtk_button_get_type (),\r
+                                          "GtkButton::label", "send random client message",\r
+                                          "GtkWidget::parent", vbox,\r
+                                          "GtkWidget::visible", TRUE,\r
+                                          NULL),\r
+                            "signal::clicked", send_random, NULL,\r
+                            NULL);\r
+  gdk_display_add_client_message_filter (gdk_display_get_default (),\r
+                                        my_type,\r
+                                        filter_func,\r
+                                        NULL);\r
+  gtk_widget_show (window);\r
+\r
+  gtk_main ();\r
+\r
+  return 0;\r
+}\r